package com.demo.chapter11future;

import java.util.concurrent.CompletableFuture;

//实现Future那样的异步调用
public class AndThen {

	public static Integer calc(Integer para){
		try{
			//模拟一个长时间执行
			Thread.sleep(1000);
		}catch(InterruptedException e){
			e.printStackTrace();
		}
		return para * para;
	}

	public static void main(String[] args) throws Exception {
		final CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> calc(50))
			.thenApply(i -> Integer.toString(i))
			.thenApply(str -> "\"" + str + "\"")
			.thenAccept(System.out::println);
		//如果没有get方法，随着主线程的结束，所有的Daemon线程都会立即退出，从而导致calc方法无法正常完成
		future.get();
	}

}
